package com.rede.didiok.common.dto.rank;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.security.auth.Subject;

import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.rede.didiok.common.dto.BaseDto;
import com.rede.didiok.common.dto.user.UserDto;
import com.rede.didiok.common.validator.annotion.IntegerNotNull;
import com.rede.didiok.common.validator.group.Insert;
import com.rede.didiok.common.validator.group.Update;

/**
 * 榜单成员
 * 
 * @author Rede
 * @email didiok@foxmail.com
 * @date 2023-07-20 22:09:24
 */
@Data
@AllArgsConstructor
public class RankMemberDto extends BaseDto<RankMemberDto> {

	/**
	 * 唯一oid【自动递增】
	 */
	private Integer oid;
	/**
	 * 成员ids
	 */
	private List<String> uids;
	/**
	 * 成员id
	 */
	private String memberUid;
	/**
	 * 成员名称
	 */
	private String memberName;
	/**
	 * 封面图片url地址
	 */
	private String memberCover;
	/**
	 * 榜单id
	 */
	private String rankUid;
	/**
	 * 榜单名称
	 */
	private String rankName;
	/**
	 * 所属榜单分类id
	 */
	private String catUid;
	/**
	 * 所属榜单分类名称
	 */
	private String catName;
	/**
	 * 上榜理由id
	 */
	private String reasonUid;
	/**
	 * 上榜理由名称
	 */
	private String reasonName;
	/**
	 * 成员简介
	 */
	private String summary;
	/**
	 * 内容
	 */
	private String content;
	/**
	 * 等级称号id
	 */
	private String gradeUid;
	/**
	 * 等级称号名称
	 */
	private String gradeName;
	/**
	 * 是否发布：0否，1是
	 */
	private Integer isPublish;
	/**
	 * 标签id
	 */
	private String tagUid;
	/**
	 * 是否允许他人添加里程碑事件:0否，1是
	 */
	private Integer otherAddMilestone;
	/**
	 * 是否开启评论(0:否 1:是)
	 */
	private Integer openComment;
	/**
	 * 评论数
	 */
	private Integer commentCount;
	/**
	 * 支付方式：0：默认 1: 支付宝, 2: 微信 3: 第三方支付宝 4: 第三方微信 11:蓝兔支付中的微信支付 12:私下转账
	 */
	private Integer payMethod;
	/**
	 * 是否删除:0否 1是
	 */
	private Integer isDelete;
	/**
	 * 创建人id
	 */
	private String createUserUid;
	/**
	 * 创建人名称
	 */
	private String createUserName;
	/**
	 * 发布时间
	 */
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	private Date publishTime;
	/**
	 * 更新时间
	 */
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	private Date updateTime;
	/**
	 * 创建时间
	 */
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	private Date createTime;

	/**
	 * 是否开启加载校验
	 */
	private Integer openLoadingValid;

	/**
	 * 阅读权限：1 公开、2 登录后可见、3 评论后可见、4 输入验证码可见、5 会员可见、6 付费可见
	 */
	private Integer visitAuth;

	/**
	 * 审核状态【0：审核未通过，1：审核通过】
	 */
	private Integer auditStatus;

	/**
	 * 活动状态【0：活动取消，1：正常】
	 */
	private Integer activityStatus;
	/**
	 * 标题图片uid
	 */
	private String fileUid;
	/**
	 * 管理员UID
	 */
	private String adminUid;
	/**
	 * 审核时间
	 */
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	private Date auditTime;

	/**
	 * 审核人名称
	 */
	private String auditName;

	/**
	 * 文章来源【0 后台添加，1 用户投稿】
	 */
	private String rankMemberSource;

	/**
	 * 审批拒绝原因
	 */
	private String rejectReason;

	/**
	 * 推荐级别，用于首页推荐
	 * 0：正常
	 * 1：一级推荐(轮播图)
	 * 2：二级推荐(top)
	 * 3：三级推荐 ()
	 * 4：四级 推荐 (特别推荐)
	 */
	@IntegerNotNull(groups = {Insert.class, Update.class})
	private Integer level;

	/**
	 * 博客等级关键字，仅用于getList
	 */
	private String levelKeyword;

	/**
	 * 博客点击数
	 */
	private Integer clickCount;

	/**
	 * 当前等级最大允许榜单成员的数量
	 */
	private Long currentLevelAllowCount;

	/**
	 * 排序字段，数值越大，越靠前
	 */
	private Integer sort;

	/**
	 * 分数，用于推荐排序
	 */
	private BigDecimal score;

	/**
	 * 是否置顶
	 */
	private Integer isTop;

	// 以下字段不存入数据库，封装为了方便使用

	/**
	 * 使用Sort字段进行排序 （0：不使用， 1：使用），默认为0
	 */
	private Integer useSort;

	/**
	 * 是否前台通知 【0 前台 ，1 后台】
	 */
	private Integer isBack;

	/**
	 * 标签,一篇博客对应多个标签
	 */
	private MemberGradeDto grade;

	/**
	 * 标题图
	 */
	private List<String> photoList;

	/**
	 * 博客分类
	 */
	private RankCategoryDto category;

	/**
	 * 博客分类名
	 */
	private String categoryName;

	/**
	 * 博客标题图
	 */
	private String photoUrl;

	/**
	 * 版权申明
	 */
	private String copyright;

	/**
	 * 博客所属专题
	 */
	private Subject subject;

	/**
	 * 博客所属专题列表【1个博客可能属于多个专题】
	 */
	private List<Subject> subjectList;
//
//	/**
//	 * 专题列表
//	 */
//	private List<SubjectItem> subjectItemList;

	/**
	 * 投稿人
	 */
	private UserDto user;

	/**
	 * 点赞相关信息
	 */
	private Map<String, Object> praiseInfo;

	/**
	 * 收藏相关信息
	 */
	private Map<String, Object> collectInfo;

	/**
	 * 积分合计
	 */
	private String sumCredits;

	/**
	 * 点赞用户列表
	 */
	private List<UserDto> praiseUserList;

	/**
	 * 访问鉴权成功
	 */
	private Boolean visitAuthSuccess;

	/**
	 * 支付订单数
	 */
	private Integer payOrderCount;

	/**
	 * 依据排序
	 */
	private String orderBy;

	/**
	 * 依据排序（依据attrInfo表中的字段排序）
	 */
	private String attrOrderBy;


	/**
	 * 博客所属专题
	 */
	private RankDto rank;

	/**
	 * 博客标题
	 */
	private String title;

	/**
	 * 点赞数
	 */
	private Integer praiseCount;

	/**
	 * 点踩数量
	 */
	private Integer treadCount;

	/**
	 * 博客收藏数
	 */
	private Integer collectCount;

	/**
	 * 是否原创
	 */
	private String isOriginal;

	/**
	 * 如果原创，作者为管理员名
	 */
	private String author;

	/**
	 * 文章出处
	 */
	private String articlesPart;

	/**
	 * 文章类型【0 博客， 1：推广】
	 */
	private String type;

	/**
	 * 外链【如果是推广，那么将跳转到外链】
	 */
	private String outsideLink;

	/**
	 * 文章来源【0 后台添加，1 用户投稿】
	 */
	private String articleSource;

	/**
	 * 文章字符数
	 */
	private Integer charCount;

	/**
	 * 活动的属性信息
	 */
	private AttrInfoDto attrInfoDto;

	/**
	 * 无参构造方法，初始化默认值
	 */
	public RankMemberDto() {
		this.level = 0;
		this.useSort = 0;
	}

	/**
	 * 省名称
	 */
	private String province;
	/**
	 * 省code
	 */
	private String provinceCode;
	/**
	 * 市名称
	 */
	private String city;
	/**
	 * 市code
	 */
	private String cityCode;
	/**
	 * 区名称
	 */
	private String district;
	/**
	 * 区code
	 */
	private String districtCode;
	/**
	 * 经度
	 */
	private BigDecimal longitude;
	/**
	 * 纬度
	 */
	private BigDecimal latitude;
	/**
	 * 地址名称
	 */
	private String address;
	/**
	 * 活动开始时间
	 */
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	private Date startTime;
	/**
	 * 活动结束时间
	 */
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	private Date endTime;
	/**
	 * 报名截止时间
	 */
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	private Date applyEndTime;
	/**
	 * 报名费
	 */
	private BigDecimal price;
	/**
	 * 人数上限
	 */
	private Integer allowPeopleNum;
	/**
	 * 备注
	 */
	private String remark;
	/**
	 * 发起人的微信号
	 */
	private String weChat;
	/**
	 * 发起人的手机号
	 */
	private String phone;

	/**
	 * 排序方式：1近期活动，2远期活动，3最新发布，9历史活动
	 */
	private Integer activityOrderBy;

	/**
	 * 活动结束时间是否大于当前时间：1大于，0小于等于
	 */
	private Integer endTimeGtNow;

	/**
	 * 报名截止时间是否大于当前时间：1大于，0小于等于
	 */
	private Integer applyEndTimeGtNow;


	/**
	 * 领队佣金
	 */
	private BigDecimal leaderSalary;
	/**
	 * 领队人数上限
	 */
	private Integer allowLeaderNum;
	/**
	 * 领队条件
	 */
	private String leaderCondition;
	/**
	 * 领队工作内容
	 */
	private String leaderTask;
	/**
	 * 领队备注
	 */
	private String leaderRemark;
	/**
	 * 领队报名截止时间
	 */
	private Date leaderApplyEndTime;

}
